#include <mqueue.h>
#include <errno.h>

#define MAXMSG 1024

int main()
{	mqd_t id;
	char mes0[MAXMSG]="hola soc prioritat 0\n";
	char mes1[MAXMSG]="prioritat 1\n";
	char mes3[MAXMSG]="hola soc de prioritat 3\n";
	int prior,prior2 =1;
    	struct mq_attr sta,osta;
	int mida,i,error;

	id=mq_open("cua",O_CREAT|O_RDWR,S_IRUSR|S_IWUSR,NULL);

    	printf("id %i errno %i \n",id,errno);
    	switch (errno)
	{   case EACCES: printf("eacces");
    	    case EEXIST: printf("eexist"); break;
    	    case EINTR: printf("eintr"); break;
    	    case EINVAL: printf("einval"); break;
    	    case ELOOP: printf("eloop"); break;
    	    case EMFILE: printf("emfile"); break;
    	    case ENAMETOOLONG: printf("enametoolong"); break;
    	    case ENOENT: printf("enoent"); break;
    	    case ENOSPC: printf("enospc"); break;
    	    case ENOSYS: printf("enosys"); break;
    	}
    	error=mq_getattr(id,&sta);

    	printf("mida %u, maxmsg %u\n",sta.mq_maxmsg,sta.mq_msgsize);
    	printf("error %i errno %i \n",error,errno);

	printf("escric %s\n",mes1);
	error=mq_send(id,mes1,sizeof(mes1),1);

    	switch (errno)
	{   case EAGAIN: printf("eagain");
    	    case EBADF: printf("ebadf"); break;
    	    case EINTR: printf("eintr"); break;
    	    case EINVAL: printf("einval"); break;
    	    case EMSGSIZE: printf("msgsize"); break;
    	}
    	printf("error %i errno %i \n",error,errno);

	printf("escric %s\n",mes3);
	error=mq_send(id,mes3,sizeof(mes1),3);

	printf("escric %s\n",mes0);
	error=mq_send(id,mes0,sizeof(mes0),0);

/*	mida=mq_receive(id,mes2,sta.mq_msgsize,&prior2);
	printf("error %i errno %i \n",error,errno);
    	switch (errno)
	{   case EAGAIN: printf("eagain\n"); break;
    	    case EBADF: printf("ebadf\n"); break;
    	    case EINTR: printf("eintr\n"); break;
    	    case EINVAL: printf("einval\n"); break;
    	    case EMSGSIZE: printf("msgsize\n"); break;
    	}
	printf("missatge: %s mida=%i\n",mes2,mida);
*/
	printf("acabo\n");

	mq_close(id);
}
